{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "bc1d81af-e3ce-4710-b68f-32d860806fc5",
   "metadata": {},
   "source": [
    "# PCA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3d1b1d0e-e2ca-459f-8b00-7c6574c9a424",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "eff70916-4d9f-4dc6-8ee4-16ad8ee65d92",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import datasets\n",
    "# 导入sklearn自带的iris数据集\n",
    "iris = datasets.load_iris()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2353bf56-b67f-4bb8-87b2-1f8af14b5f16",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.90068117, -1.14301691, -1.38535265, -1.50652052, -1.02184904,\n",
       "       -0.53717756, -1.50652052, -1.02184904, -1.74885626, -1.14301691,\n",
       "       -0.53717756, -1.26418478, -1.26418478, -1.87002413, -0.05250608,\n",
       "       -0.17367395, -0.53717756, -0.90068117, -0.17367395, -0.90068117,\n",
       "       -0.53717756, -0.90068117, -1.50652052, -0.90068117, -1.26418478,\n",
       "       -1.02184904, -1.02184904, -0.7795133 , -0.7795133 , -1.38535265,\n",
       "       -1.26418478, -0.53717756, -0.7795133 , -0.41600969, -1.14301691,\n",
       "       -1.02184904, -0.41600969, -1.14301691, -1.74885626, -0.90068117,\n",
       "       -1.02184904, -1.62768839, -1.74885626, -1.02184904, -0.90068117,\n",
       "       -1.26418478, -0.90068117, -1.50652052, -0.65834543, -1.02184904,\n",
       "        1.40150837,  0.67450115,  1.2803405 , -0.41600969,  0.79566902,\n",
       "       -0.17367395,  0.55333328, -1.14301691,  0.91683689, -0.7795133 ,\n",
       "       -1.02184904,  0.06866179,  0.18982966,  0.31099753, -0.29484182,\n",
       "        1.03800476, -0.29484182, -0.05250608,  0.4321654 , -0.29484182,\n",
       "        0.06866179,  0.31099753,  0.55333328,  0.31099753,  0.67450115,\n",
       "        0.91683689,  1.15917263,  1.03800476,  0.18982966, -0.17367395,\n",
       "       -0.41600969, -0.41600969, -0.05250608,  0.18982966, -0.53717756,\n",
       "        0.18982966,  1.03800476,  0.55333328, -0.29484182, -0.41600969,\n",
       "       -0.41600969,  0.31099753, -0.05250608, -1.02184904, -0.29484182,\n",
       "       -0.17367395, -0.17367395,  0.4321654 , -0.90068117, -0.17367395,\n",
       "        0.55333328, -0.05250608,  1.52267624,  0.55333328,  0.79566902,\n",
       "        2.12851559, -1.14301691,  1.76501198,  1.03800476,  1.64384411,\n",
       "        0.79566902,  0.67450115,  1.15917263, -0.17367395, -0.05250608,\n",
       "        0.67450115,  0.79566902,  2.24968346,  2.24968346,  0.18982966,\n",
       "        1.2803405 , -0.29484182,  2.24968346,  0.55333328,  1.03800476,\n",
       "        1.64384411,  0.4321654 ,  0.31099753,  0.67450115,  1.64384411,\n",
       "        1.88617985,  2.4920192 ,  0.67450115,  0.55333328,  0.31099753,\n",
       "        2.24968346,  0.55333328,  0.67450115,  0.18982966,  1.2803405 ,\n",
       "        1.03800476,  1.2803405 , -0.05250608,  1.15917263,  1.03800476,\n",
       "        1.03800476,  0.55333328,  0.79566902,  0.4321654 ,  0.06866179])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 自己实现 iris 的第一列数据标准化\n",
    "c1 = iris.data[:, 0]   # 提取第一列数据\n",
    "mean = sum(c1)/len(c1) # 求均值\n",
    "std = np.std(c1)       # 求标准差\n",
    "dat = (c1 - mean)/std  # 标准化\n",
    "dat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "6207947e-e06b-4202-b728-03df75e45048",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = StandardScaler().fit_transform(iris['data']) # iris 数据标准化放进 x\n",
    "# 数据二维化\n",
    "pca = PCA(n_components=2)\n",
    "principalComponents = pca.fit_transform(x)\n",
    "principalDf = pd.DataFrame(data = principalComponents\n",
    "             , columns = ['principal component 1', 'principal component 2'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "24a42e35-f918-46e6-9f9e-7cda1b35502b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as py\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "7c73aac5-9692-4fd6-aa2f-e8e16fe7e079",
   "metadata": {},
   "outputs": [],
   "source": [
    "trainData_X= principalDf.iloc[:,:2]\n",
    "trainData_y = iris['target']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "413b8fa4-3b85-4454-b51b-e208b461e6ab",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(trainData_X, trainData_y, test_size=0.3, random_state=123456)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b90b244b-310f-4bb7-9a28-e5ac6d5dbd23",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(105, 2) (45, 2)\n"
     ]
    }
   ],
   "source": [
    "print(X_train.shape,X_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "adc5102d-2ece-4483-80da-efafd18fd25b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;RandomForestClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier()"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "# 通过RandomForestClassifier类定义一个随机森林模型，名字叫rf\n",
    "rf = RandomForestClassifier(n_estimators = 100)\n",
    "\n",
    "# 对lr模型进行训练(fit)\n",
    "rf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a4def887-fc20-402b-85ac-d397c70fa4ed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>importance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>principal component 1</td>\n",
       "      <td>0.773368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>principal component 2</td>\n",
       "      <td>0.226632</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 feature  importance\n",
       "0  principal component 1    0.773368\n",
       "1  principal component 2    0.226632"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "features = pd.DataFrame()\n",
    "features['feature'] = X_train.columns\n",
    "features['importance'] = rf.feature_importances_\n",
    "features = features.sort_values(by =['importance'], ascending=False)\n",
    "\n",
    "# 显示最重要的前10个特征变量\n",
    "features.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "3a55db8d-3e76-491c-9744-29675738d8b3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'criterion': 'gini', 'max_features': 2, 'n_estimators': 10}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "parameters = {\n",
    "    'n_estimators':[5,10,15,20,30],\n",
    "    'max_features':[1,2,3,4],\n",
    "    'criterion':['gini','entropy']\n",
    "}\n",
    "\n",
    "rf = RandomForestClassifier()\n",
    "rf_search = GridSearchCV(rf, parameters, scoring='accuracy', cv=5)\n",
    "rf_search.fit(X_train, y_train)\n",
    "\n",
    "#查看最佳结果\n",
    "rf_search.best_estimator_\n",
    "rf_search.best_score_\n",
    "rf_search.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "09cf47d8-c86a-4568-9aa0-cd62fe34e7d2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-2 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-2 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-2 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-2 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-2 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(max_features=2, n_estimators=10)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;RandomForestClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(max_features=2, n_estimators=10)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier(max_features=2, n_estimators=10)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf = RandomForestClassifier(criterion='gini',max_features=2,n_estimators=10)\n",
    "rf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "fbbfc7c0-1875-4665-9458-08fc6f71faf1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        15\n",
      "           1       0.91      0.67      0.77        15\n",
      "           2       0.74      0.93      0.82        15\n",
      "\n",
      "    accuracy                           0.87        45\n",
      "   macro avg       0.88      0.87      0.86        45\n",
      "weighted avg       0.88      0.87      0.86        45\n",
      "\n",
      "[[15  0  0]\n",
      " [ 0 10  5]\n",
      " [ 0  1 14]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc\n",
    "\n",
    "# 利用模型对测试集进行预测，输出target预测标签值和概率\n",
    "y_test_pred = rf.predict(X_test)\n",
    "y_test_prob = rf.predict_proba(X_test)\n",
    "\n",
    "# 分类评估汇总报告classification_report\n",
    "print(classification_report(y_test,y_test_pred))\n",
    "# 误分类矩阵 confusion_matrix\n",
    "print(confusion_matrix(y_test,y_test_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3efb34cf-2f61-4eb4-b7ef-bb47510b0afc",
   "metadata": {},
   "source": [
    "# 练习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f57f439f-e837-4319-b3ef-efac04e65ed3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "4f9462eb-66f2-4bf6-bb16-557bdacd100f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading in LAMOST data...\n"
     ]
    }
   ],
   "source": [
    "print(\"Reading in LAMOST data...\")\n",
    "x = np.load('fluxs.npy')\n",
    "y = np.load('sclss.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "5ec82434-5efd-49e1-bfeb-caf9434dd90c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(700, 3700)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "ac4baa44-8706-46ed-9c1c-90f93fea2d7d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['B', 'F', 'F', 'A', 'G', 'K', 'O', 'B', 'M', 'O', 'G', 'M', 'F',\n",
       "       'K', 'G', 'F', 'F', 'O', 'B', 'G', 'F', 'G', 'B', 'O', 'A', 'K',\n",
       "       'M', 'A', 'F', 'F', 'F', 'G', 'F', 'A', 'K', 'G', 'A', 'G', 'K',\n",
       "       'K', 'K', 'A', 'K', 'G', 'G', 'F', 'A', 'M', 'B', 'F', 'K', 'B',\n",
       "       'G', 'F', 'F', 'O', 'O', 'M', 'F', 'A', 'O', 'G', 'O', 'O', 'K',\n",
       "       'F', 'G', 'A', 'A', 'B', 'G', 'F', 'G', 'F', 'M', 'K', 'A', 'B',\n",
       "       'B', 'G', 'K', 'K', 'M', 'M', 'A', 'G', 'K', 'M', 'B', 'K', 'G',\n",
       "       'G', 'B', 'O', 'B', 'B', 'O', 'F', 'G', 'B', 'O', 'K', 'O', 'G',\n",
       "       'K', 'B', 'O', 'G', 'A', 'K', 'M', 'F', 'A', 'F', 'F', 'A', 'M',\n",
       "       'B', 'A', 'O', 'O', 'F', 'K', 'A', 'O', 'K', 'M', 'A', 'M', 'G',\n",
       "       'O', 'K', 'A', 'M', 'K', 'O', 'F', 'B', 'F', 'B', 'M', 'O', 'O',\n",
       "       'K', 'O', 'M', 'K', 'A', 'M', 'O', 'G', 'O', 'B', 'O', 'A', 'K',\n",
       "       'G', 'B', 'K', 'F', 'A', 'M', 'B', 'M', 'G', 'G', 'O', 'F', 'O',\n",
       "       'B', 'O', 'K', 'M', 'A', 'O', 'F', 'M', 'A', 'G', 'O', 'A', 'K',\n",
       "       'F', 'M', 'O', 'F', 'F', 'F', 'K', 'G', 'O', 'O', 'O', 'F', 'K',\n",
       "       'B', 'F', 'G', 'M', 'F', 'M', 'B', 'A', 'A', 'G', 'F', 'M', 'B',\n",
       "       'B', 'A', 'G', 'K', 'O', 'F', 'M', 'O', 'G', 'O', 'A', 'F', 'M',\n",
       "       'M', 'O', 'B', 'B', 'B', 'A', 'A', 'K', 'K', 'B', 'F', 'F', 'F',\n",
       "       'F', 'G', 'M', 'B', 'O', 'M', 'M', 'G', 'G', 'F', 'A', 'K', 'G',\n",
       "       'B', 'A', 'O', 'O', 'G', 'A', 'F', 'B', 'M', 'A', 'B', 'G', 'F',\n",
       "       'A', 'G', 'K', 'G', 'A', 'A', 'M', 'B', 'A', 'K', 'K', 'B', 'K',\n",
       "       'O', 'A', 'F', 'A', 'M', 'O', 'A', 'G', 'M', 'G', 'F', 'M', 'K',\n",
       "       'B', 'F', 'K', 'B', 'G', 'A', 'A', 'F', 'A', 'B', 'A', 'G', 'G',\n",
       "       'A', 'A', 'A', 'O', 'F', 'M', 'B', 'F', 'F', 'M', 'M', 'G', 'K',\n",
       "       'K', 'F', 'B', 'A', 'G', 'B', 'B', 'M', 'A', 'K', 'B', 'M', 'G',\n",
       "       'K', 'B', 'O', 'A', 'F', 'F', 'M', 'F', 'G', 'G', 'K', 'G', 'M',\n",
       "       'M', 'K', 'G', 'A', 'F', 'K', 'B', 'B', 'G', 'G', 'G', 'B', 'A',\n",
       "       'M', 'M', 'F', 'O', 'K', 'A', 'G', 'K', 'K', 'B', 'M', 'B', 'M',\n",
       "       'A', 'F', 'G', 'F', 'B', 'K', 'B', 'K', 'O', 'F', 'O', 'G', 'A',\n",
       "       'A', 'K', 'K', 'B', 'B', 'K', 'O', 'G', 'O', 'M', 'A', 'F', 'O',\n",
       "       'A', 'K', 'M', 'M', 'A', 'G', 'F', 'A', 'G', 'M', 'K', 'B', 'O',\n",
       "       'A', 'B', 'K', 'O', 'B', 'K', 'G', 'F', 'F', 'F', 'G', 'M', 'G',\n",
       "       'F', 'O', 'B', 'O', 'K', 'K', 'G', 'O', 'A', 'K', 'O', 'G', 'G',\n",
       "       'G', 'M', 'K', 'M', 'B', 'G', 'F', 'K', 'K', 'M', 'B', 'O', 'B',\n",
       "       'A', 'O', 'F', 'F', 'A', 'G', 'O', 'O', 'B', 'O', 'K', 'A', 'F',\n",
       "       'O', 'F', 'F', 'A', 'K', 'F', 'K', 'G', 'B', 'F', 'O', 'B', 'G',\n",
       "       'F', 'G', 'O', 'G', 'G', 'M', 'F', 'A', 'O', 'M', 'B', 'G', 'M',\n",
       "       'B', 'M', 'F', 'B', 'A', 'A', 'F', 'K', 'K', 'K', 'A', 'B', 'K',\n",
       "       'F', 'F', 'B', 'O', 'B', 'K', 'M', 'K', 'K', 'K', 'O', 'M', 'O',\n",
       "       'B', 'A', 'B', 'A', 'B', 'G', 'B', 'M', 'M', 'G', 'K', 'F', 'G',\n",
       "       'O', 'F', 'K', 'A', 'B', 'G', 'B', 'O', 'F', 'G', 'O', 'K', 'K',\n",
       "       'O', 'K', 'F', 'B', 'F', 'M', 'K', 'M', 'A', 'G', 'A', 'O', 'B',\n",
       "       'B', 'B', 'A', 'F', 'K', 'O', 'B', 'A', 'A', 'M', 'M', 'A', 'B',\n",
       "       'G', 'B', 'M', 'O', 'K', 'K', 'O', 'A', 'G', 'M', 'G', 'O', 'B',\n",
       "       'M', 'M', 'O', 'G', 'A', 'M', 'O', 'B', 'K', 'M', 'O', 'O', 'G',\n",
       "       'A', 'A', 'B', 'M', 'A', 'G', 'M', 'B', 'G', 'K', 'B', 'M', 'M',\n",
       "       'M', 'M', 'K', 'F', 'A', 'A', 'O', 'O', 'F', 'A', 'K', 'K', 'B',\n",
       "       'F', 'K', 'K', 'M', 'M', 'A', 'B', 'M', 'O', 'F', 'M', 'M', 'A',\n",
       "       'O', 'A', 'M', 'F', 'O', 'B', 'B', 'A', 'O', 'O', 'M', 'A', 'G',\n",
       "       'O', 'O', 'K', 'M', 'M', 'O', 'B', 'O', 'G', 'K', 'M', 'M', 'B',\n",
       "       'G', 'O', 'K', 'A', 'A', 'O', 'K', 'M', 'F', 'B', 'K', 'O', 'F',\n",
       "       'M', 'O', 'G', 'G', 'G', 'M', 'M', 'F', 'O', 'A', 'M', 'G', 'B',\n",
       "       'M', 'G', 'F', 'O', 'A', 'F', 'M', 'K', 'B', 'A', 'O', 'B', 'B',\n",
       "       'G', 'F', 'M', 'K', 'K', 'B', 'M', 'A', 'F', 'G', 'F'], dtype='<U1')"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "ea8a8643-9fb3-4f80-8b7b-533a9d598adf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x[0])\n",
    "plt.plot(x[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "86291a29-a996-4c26-aaa6-89ec4e80fd06",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABlUAAAHUCAYAAACj267QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hT9dsG8DtJR9JNWygtG0T2HrJBZI8KIigIioCKyBIBBVwgioqCOBCRoYgDUZEpQ3+I4EBAhoBsCqV00D3TZr1/nDdp9h5tc3+uywt7cnLyTXJS9Nx5nkek0Wg0ICIiIiIiIiIiIiIiIqvEvl4AERERERERERERERFRZcBQhYiIiIiIiIiIiIiIyA4MVYiIiIiIiIiIiIiIiOzAUIWIiIiIiIiIiIiIiMgODFWIiIiIiIiIiIiIiIjswFCFiIiIiIiIiIiIiIjIDgxViIiIiIiIiIiIiIiI7MBQhYiIiIiIiIiIiIiIyA4MVYiIiIiIiIiIiIiIiOzAUIWIiIiIiDzu6NGjGDlyJOrWrYvg4GDExcWha9eueO6553y9NKxevRqfffaZr5dBRERERESVgEij0Wh8vQgiIiIiIqq6du/ejcTERPTp0wdPPPEE4uPjkZqaiuPHj+Obb77BrVu3fLq+li1bIjY2Fr/++qtP10FERERERBUfQxUiIiIiIvKo3r17IyUlBRcuXEBAQIDBbWq1GmKxbwvoHQlVFAoFRCKRyfMgIiIiIiL/wPZfRERERETkUVlZWYiNjTUbROgHKvXr18ewYcOwbds2tG7dGlKpFA0bNsT7779vcr/8/HzMnTsXDRo0QFBQEGrVqoXZs2ejqKjIYD+1Wo0PPvgAbdu2hUwmQ1RUFLp06YIdO3boHvPcuXM4dOgQRCIRRCIR6tevDwD49ddfIRKJ8MUXX+C5555DrVq1EBwcjCtXruDVV1+FSCQyWddnn30GkUiEpKQkk+e1a9cutGvXDjKZDM2aNcOuXbt092nWrBlCQ0PRuXNnHD9+3OHXmIiIiIiIvINfryIiIiIiIo/q2rUr1q1bh5kzZ+KRRx5B+/btERgYaHbfU6dOYfbs2Xj11VdRs2ZNfPnll5g1axbKysowd+5cAEBxcTF69+6NW7duYeHChWjdujXOnTuHl19+Gf/++y9+/vlnXeAxceJEbN68GZMnT8aSJUsQFBSEf/75Rxd6bNu2DQ8++CAiIyOxevVqAEBwcLDBmhYsWICuXbtizZo1EIvFqFGjhsOvwenTp7FgwQIsWrQIkZGRWLx4MR544AEsWLAAv/zyC9544w2IRCI8//zzGDZsGK5fvw6ZTObw4xARERERkWcxVCEiIiIiIo968803ceHCBXzwwQf44IMPEBgYiE6dOmH48OGYPn06wsLCdPvevn0bJ0+eRJs2bQAAgwcPRkZGBl577TVMmzYNISEheP/993HmzBkcPXoUHTt2BADcd999qFWrFh588EHs3bsXgwcPxuHDh/HFF19g0aJFWLp0qe4xBg0apPt3beVIREQEunTpYnb9jRo1wtatW116DbKysvDXX3+hVq1aAICEhAS0bdsWn376Ka5cuYKQkBAAgEgkwogRI/Dzzz9j+PDhLj0mERERERG5H9t/ERERERGRR8XExODw4cM4duwY3nzzTdx///24dOkSFixYgFatWiEzM1O3b4sWLXSBita4ceOQn5+Pf/75BwCwa9cutGzZEm3btoVSqdT9M3DgQIhEIt1slJ9++gkA8Mwzz7i0/lGjRrl0fwBo27atLlABgGbNmgEA+vTpowtU9LffuHHD5cckIiIiIiL3Y6UKERERERF5RceOHXWVJQqFAs8//zxWrlyJt99+G2+//TYAoGbNmib3027LysoCAKSnp+PKlSsWW4hpQ5o7d+5AIpGYPaYj4uPjXbo/AERHRxv8HBQUZHW7XC53+TGJiIiIiMj9GKoQEREREZHXBQYG4pVXXsHKlStx9uxZ3fa0tDSTfbXbYmJiAACxsbGQyWTYsGGD2WPHxsYCAKpXrw6VSoW0tDSXghFzA+mlUikAoLS01GAGi37VDRERERERVT1s/0VERERERB6Vmppqdvt///0HQJgvonXu3DmcPn3aYL+vvvoK4eHhaN++PQBg2LBhuHr1KmJiYnTVL/r/1K9fH4AwjwUAPv74Y6vrCw4ORklJiUPPSfsYZ86cMdi+c+dOh45DRERERESVCytViIiIiIjIowYOHIjatWtj+PDhaNq0KdRqNU6dOoV3330XYWFhmDVrlm7fhIQEJCYm4tVXX0V8fDw2b96MAwcO4K233tLNHpk9eza+//579OrVC88++yxat24NtVqNmzdvYv/+/Xjuuedwzz33oGfPnpgwYQKWLl2K9PR0DBs2DMHBwTh58iRCQkIwY8YMAECrVq3wzTffYMuWLWjYsCGkUilatWpl9TkNGTIE0dHRmDx5MpYsWYKAgAB89tlnSE5O9twLSUREREREPsdQhYiIiIiIPOrFF1/E9u3bsXLlSqSmpqK0tBTx8fHo168fFixYoBvODggD3R9//HG88soruHz5MhISErBixQo8++yzun1CQ0Nx+PBhvPnmm1i7di2uX78OmUyGunXrol+/froqEgD47LPP0L59e6xfvx6fffYZZDIZmjdvjoULF+r2Wbx4MVJTU/HEE0+goKAA9erVQ1JSktXnFBERgb1792L27NkYP348oqKiMGXKFAwePBhTpkxx22tHREREREQVi0ij0Wh8vQgiIiIiIqL69eujZcuW2LVrl6+XQkREREREZBZnqhAREREREREREREREdmBoQoREREREREREREREZEd2P6LiIiIiIiIiIiIiIjIDqxUISIiIiIiIiIiIiIisgNDFSIiIiIiIiIiIiIiIjswVCEiIiIiIiIiIiIiIrJDgK8X4G1qtRq3b99GeHg4RCKRr5dDREREREREREREREQ+pNFoUFBQgISEBIjF1mtR/C5UuX37NurUqePrZRARERERERERERERUQWSnJyM2rVrW93H70KV8PBwAMKLExER4ePVVCwKhQL79+/HgAEDEBgY6OvlEHkFz3vyVzz3yR/xvCd/xXOf/BHPe/JXPPfJH/G8J3fIz89HnTp1dPmBNX4XqmhbfkVERDBUMaJQKBASEoKIiAj+AiK/wfOe/BXPffJHPO/JX/HcJ3/E8578Fc998kc878md7BkZwkH1REREREREREREREREdvBpqPLbb79h+PDhSEhIgEgkwo8//mjzPocOHUKHDh0glUrRsGFDrFmzxvMLJSIiIiIiIiIiIiIiv+fTUKWoqAht2rTBhx9+aNf+169fx5AhQ9CzZ0+cPHkSCxcuxMyZM/H99997eKVEREREREREREREROTvfDpTZfDgwRg8eLDd+69ZswZ169bFe++9BwBo1qwZjh8/jnfeeQejRo3y0CqJiIiIiIiIiIiIiIgq2aD6P//8EwMGDDDYNnDgQKxfvx4KhcLsIKLS0lKUlpbqfs7PzwcgDDBSKBSeXXAlo309+LqQP+F5T/6K5z75I5735K947pM/4nlP/ornPvkjnvfkDo6cP5UqVElLS0NcXJzBtri4OCiVSmRmZiI+Pt7kPsuWLcPixYtNtu/fvx8hISEeW2tlduDAAV8vgcjreN6Tv+K5T/6I5z35K5775I943pO/4rlP/ojnPbmiuLjY7n0rVagCACKRyOBnjUZjdrvWggULMGfOHN3P+fn5qFOnDgYMGICIiAjPLbQSUigUOHDgAPr372+26oeoKuJ5T/6K5z75I5735K947pM/4nlP/ornPvkjnvfkDtoOV/aoVKFKzZo1kZaWZrAtIyMDAQEBiImJMXuf4OBgBAcHm2wPDAzkh8wCvjbkj3jek7/iuU/+iOc9+Sue++SPeN6Tv+K5T/6I5z25wpFzR+zBdbhd165dTcq49u/fj44dO/IDQ0REREREREREREREHuXTUKWwsBCnTp3CqVOnAADXr1/HqVOncPPmTQBC665HH31Ut//UqVNx48YNzJkzB//99x82bNiA9evXY+7cub5YPhERERERERERERER+RGftv86fvw47r33Xt3P2tknjz32GD777DOkpqbqAhYAaNCgAfbs2YNnn30WH330ERISEvD+++9j1KhRXl87ERERERERERERERH5F5+GKn369NENmjfns88+M9nWu3dv/PPPPx5cFRERERERERERERERkalKNVOFiIiIiIiIiIiIiIjIVxiqEPmIWq1GRkYG1Gq1r5dCRERERERERERERHbwafsvIn+1dOlS7N27F3FxcWjZsiUWL17s6yURERERERERERERkQ2sVCHyMo1GgyNHjuB///sfPvzwQ6Slpfl6SURERERERERERERkB4YqRF6WmZmJ+Ph4BAUFISIiAvn5+b5eEhERERERERERERHZgaEKkZddunQJjRs3BgCEhISgqKjIxysiIiIiIiIiIiIiInswVCHyslOnTqFNmzYAAJFI5OPVEBEREREREREREZG9GKoQedn58+fRsmVLXy+DiIiIiIiIiIiIiBzEUIXIyzIzM1G9enVfL4OIiIiIiIiIiIiIHMRQhcjLSkpKIJPJdD9LpVKcP3/ehysiIiIiIiIiIiIiInswVCHyAf1ZKkuWLMG0adN8uBoiIiIiIiIiIiIisgdDFSILvv76a5SVlXn8cZo2bYqwsDAolUqPPxYREREREREREREROY+hCpEZcrkc06dPx549e7zyeN26dcPBgwe98lhERERERERERERE5ByGKkRmXLx4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AIMqREREREREDmRalorsh+W/iIiIyGF8fR2bqcKgSqFhUIWIiIiIiMiB2Ki+cBnuU8NMFQZViIiIqFD5+ABJSca3pacXbVAlNrZonquUYVCFiIiIiIioGOBEv+1My38Z3p4b7msiIiIqMEs9VYqq/Ff16sDx40D79mxYb2cMqhARERERETmQtZkqLBFmO0s9VXTXiYiIiAqNuaDKhQtAWFjRPL+bG/DLL0CDBsDt20XznKUEgypEREREREROghP9hYvlv4iIiKjImOup8ttvQKdORTsOT08gNbVon7OEY1CFiIiIiIjIgQwzVci+civ/xaAKERERFSpzmSrnzklZrqLk4QGkpBTtc5ZwDKoQERERERE5EBvVF57cyn8RERERFSp395wZIqmpkjlSlJipYncMqhAREREREVGpwPJfREREVGRMP09otYAjTvDw8GBQxc4YVCEiIiIiInIgZqoUHpb/IiIiIqdx+DBQr17RPy/Lf9kdgypERERERETFACf6bWep/BfLgBEREVGRO30aqF+/6J+X5b/sjkEVIiIiIiIiB7I2U4WBgIIz3IfMVCEiIqIidecO4O9f9M/L8l92x6AKERERERGRAxlmUHAy375Y/ouIiIgcyvCkmPh4xwRVPD1Z/svOGFQhIiIiIiJyAsxEsb/8lv9iUIWIiIjswt9fMlQACaoEBBT9GJipYncMqhARERERETkQG9UXDcOgiu46ERERUaGqXBk4f15+Z6ZKicGgChERERERkQNZO7nPIIDtLAWqWP6LiIiIikTdusALLwDvvQf8849jgio1awLbthX985ZgLo4eABERERERUWnHRvWFI7fyXwyqEBERUaEbOBBo2xY4dgxo1Qrw8ir6MQQGSrYKACQlAR99BPTvD1SvXvRjKSEYVCEiIiIiInIg07JUZD+m5b64n4mIiKhIqVRASIhcHD0OADh3Djh9WgItlG8s/0VEREREROQE2FOlcLD8FxEREdF9aWlAlSpAQICjR1KsMahCRERERETkQIYZFJzMty+W/yIiIiKCZKpkZQGpqYCHh6NHU+wxqEJERERERORAugn8vEpTcaLfdpaCKkRERESliqenBFQYVLELBlWIiIiIiIgczJpG9WQ/zFQhIiKiUsXDA0hJYVDFThhUISIiIiIiciBmUBQelv8iIiIigmSqMKhiNwyqEBEREREROYG8JvoZeLEdy38RERERQR9USUsD3N0dPZpij0EVIiIiIiIiB+Jkf9FjpgoRERGVKuypYlcMqhARERERETmQYaN6TubbF8t/EREREYHlv+yMQRUiIiIiIiIH0032czLfvhhUISIiIgJQty7w7rsMqtgJgypEREREREQOpJvsz6sEGCf6iYiIiChfevcG0tMZVLETBlWIiIiIiIicAMt/2R8zVYiIiIgMsFG9XTCoQkRERERE5EBsVF94GFQhIiIiuu+hh4BDh4DQUEePpNhjUIWIiIiIiMiBrG1Uz8ALEREREeXbyy8DGzYAwcGOHkmxx6AKERERERGRg7FRfeFgpgoRERER2RuDKkRERERERA7ERvWFh0EVIiIiIrI3BlWIiIiIiIicBCfzCw/3LRERERHZA4MqREREREREDmRtpgrZzjQjhZkqRERERFRQDKoQERERERE5EBvVFx6W/yIiIiIie2NQhYiIiIiIyMEYMCk85oIqRERERET5xaAKERERERGRAxmW/2KGhH1ZCqIwU4WIiIiI8otBFSIiIiIiIifByXz7YvkvIiIiIrI3hwdVFi9ejMqVK8PDwwNNmzbFn3/+mevyO3fuRNOmTeHh4YEqVarg008/LaKREhERERER2Z+1jeo50W87BlWIiIiIyN4cGlRZvXo1JkyYgGnTpuHQoUNo06YNunTpgpiYGLPLnz9/Hl27dkWbNm1w6NAhvPrqq3j++efx448/FvHIiYiIiIiI7MNwAp+T+UREREREzs2hQZUFCxZg1KhReOqpp1C7dm0sWrQIERER+OSTT8wu/+mnn6JixYpYtGgRateujaeeegojR47E/Pnzi3jkRERERERE9mNNpgrZjpkqRERERGRvLo564vT0dBw4cABTpkwxur1Tp07YvXu32cfs2bMHnTp1Mrqtc+fOWL58OTIyMuDq6prjMWlpaUhLS8u+npiYCADIyMhARkZGQTejRNHtD+4XKk143FNpxWOfSiMe9+SssrKycOPGDXh6esLLy8viMZqZmYnTp0/bvP7MzExcv34dZ86cgYuLw74COsT169fh7e2NjIwMZGVl4dq1azh9+jSuXLkCrVZrcV9nZWXxvaKY43s+lVY89qk04nFP9mDL8eOwT9Q3b95EVlYWQkJCjG4PCQnBtWvXzD7m2rVrZpfPzMzEzZs3ERYWluMxc+bMwYwZM3LcvmXLFnh5eRVgC0qurVu3OnoIREWOxz2VVjz2qTTicU/O5vbt2zh27BiOHTuGjh07YuPGjWaXq1atGl588cV8P8+6devy/djizNfXFxs3bsTt27exY8cO7NixAwDQrl07s/t66NChuHz5ssXXgYoXvudTacVjn0ojHvdUEMnJyVYv6/DTlEzTqm1Nw9alb1t6zNSpUzFx4sTs64mJiYiIiECnTp1QpkyZ/A67RMrIyMDWrVvRsWNHs1k/RCURj3sqrXjsU2nE456c2dChQ/NcpmvXrvlaN499vTFjxuS5TH73MzkXHvdUWvHYp9KIxz3Zg67ClTUcFlQJDAyERqPJkZUSFxeXIxtFJzQ01OzyLi4uKFeunNnHuLu7w93dPcftrq6u/COzgPuGSiMe91Ra8din0ojHPZVWPPapNOJxT6UVj30qjXjcU0HYcuw4rFG9m5sbmjZtmiMta+vWrXjggQfMPqZVq1Y5lt+yZQuaNWvGPxgiIiIiIiIiIiIiIipUDguqAMDEiROxbNkyrFixAsePH8eLL76ImJgYjB07FoCU7ho+fHj28mPHjsXFixcxceJEHD9+HCtWrMDy5csxadIkR20CERERERERERERERGVEg7tqTJo0CDcunULb731Fq5evYp69eph48aNqFSpEgDg6tWriImJyV6+cuXK2LhxI1588UV8/PHHCA8PxwcffIB+/fo5ahOIiIiIiIiIiIiIiKiUcHij+meeeQbPPPOM2fs+//zzHLc9/PDDOHjwYCGPioiIiIiIiIiIiIiIyJhDy38REREREREREREREREVFwyqEBERERERERERERERWYFBFSIiIiIiIiIiIiIiIiswqEJERERERERERERERGQFBlWIiIiIiIiIiIiIiIiswKAKERERERERERERERGRFRhUISIiIiIiIiIiIiIisgKDKkRERERERERERERERFZgUIWIiIiIiIiIiIiIiMgKDKoQERERERERERERERFZwcXRAyhqiqIAABITEx08EueTkZGB5ORkJCYmwtXV1dHDISoSPO6ptOKxT6URj3sqrXjsU2nE455KKx77VBrxuCd70MULdPGD3JS6oEpSUhIAICIiwsEjISIiIiIiIiIiIiIiZ5GUlAQ/P79cl1Ep1oReShCtVovY2Fj4+vpCpVI5ejhOJTExEREREbh06RLKlCnj6OEQFQke91Ra8din0ojHPZVWPPapNOJxT6UVj30qjXjckz0oioKkpCSEh4dDrc69a0qpy1RRq9WoUKGCo4fh1MqUKcM3ICp1eNxTacVjn0ojHvdUWvHYp9KIxz2VVjz2qTTicU8FlVeGig4b1RMREREREREREREREVmBQRUiIiIiIiIiIiIiIiIrMKhC2dzd3fHmm2/C3d3d0UMhKjI87qm04rFPpRGPeyqteOxTacTjnkorHvtUGvG4p6JW6hrVExERERERERERERER5QczVYiIiIiIiIiIiIiIiKzAoAoREREREREREREREZEVGFQhIiIiIiIiIiIiIiKyAoMqREREREREREREREREVmBQhQAAixcvRuXKleHh4YGmTZvizz//dPSQiPJt+vTpUKlURpfQ0NDs+xVFwfTp0xEeHg5PT0+0bdsWR48eNVpHWloannvuOQQGBsLb2xs9e/bE5cuXi3pTiHL1xx9/oEePHggPD4dKpcLatWuN7rfXsX7nzh0MGzYMfn5+8PPzw7BhwxAfH1/IW0dkXl7H/YgRI3L8D4iKijJahsc9FTdz5sxB8+bN4evri+DgYPTu3RsnT540Wobv+VTSWHPc8z2fSqJPPvkEDRo0QJkyZVCmTBm0atUKmzZtyr6f7/dUEuV13PP9npwNgyqE1atXY8KECZg2bRoOHTqENm3aoEuXLoiJiXH00IjyrW7durh69Wr2JTo6Ovu+d999FwsWLMBHH32Ef/75B6GhoejYsSOSkpKyl5kwYQJ++uknfPfdd9i1axfu3r2L7t27IysryxGbQ2TWvXv30LBhQ3z00Udm77fXsT5kyBAcPnwYmzdvxubNm3H48GEMGzas0LePyJy8jnsAePTRR43+B2zcuNHofh73VNzs3LkTzz77LPbu3YutW7ciMzMTnTp1wr1797KX4Xs+lTTWHPcA3/Op5KlQoQLmzp2L/fv3Y//+/Wjfvj169eqVHTjh+z2VRHkd9wDf78nJKFTqtWjRQhk7dqzRbbVq1VKmTJnioBERFcybb76pNGzY0Ox9Wq1WCQ0NVebOnZt9W2pqquLn56d8+umniqIoSnx8vOLq6qp899132ctcuXJFUavVyubNmwt17ET5BUD56aefsq/b61g/duyYAkDZu3dv9jJ79uxRACgnTpwo5K0iyp3pca8oivLEE08ovXr1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yEj4+fnhscceQ1JSEgBgxIgR2LlzJ95//32oVCqoVCpcuHChKDeZiIiIiIgciEEVIiIiIiIq1r744gu4uLhg3759+OCDD7Bw4UIsW7YMgARB9u/fj3Xr1mHPnj1QFAVdu3ZFRkaGxfWdPXsWa9euxfr167F+/Xrs3LkTc+fOBQC8//77aNWqFUaPHo2rV6/i6tWriIiIKJLtJCIiIiIix2P5LyIiIiIiKtYiIiKwcOFCqFQq1KxZE9HR0Vi4cCHatm2LdevW4a+//sIDDzwAAFi1ahUiIiKwdu1aDBgwwOz6tFotPv/8c/j6+gIAhg0bht9++w2zZ8+Gn58f3Nzc4OXlhdDQ0CLbRiIiIiIicg7MVCEiIiIiomItKioKKpUq+3qrVq1w+vRpHDt2DC4uLmjZsmX2feXKlUPNmjVx/Phxi+uLjIzMDqgAQFhYGOLi4gpn8EREREREVKwwqEJERERERKWKoihGQRhTrq6uRtdVKhW0Wm1hD4uIiIiIiIoBBlWIiIiIiKhY27t3b47r1atXR506dZCZmYl9+/Zl33fr1i2cOnUKtWvXzvfzubm5ISsrK9+PJyIiIiKi4otBFSIiIiIiKtYuXbqEiRMn4uTJk/j222/x4Ycf4oUXXkD16tXRq1cvjB49Grt27cK///6LoUOHonz58ujVq1e+ny8yMhL79u3DhQsXcPPmTWaxEBERERGVIgyqEBERERFRsTZ8+HCkpKSgRYsWePbZZ/Hcc89hzJgxAICVK1eiadOm6N69O1q1agVFUbBx48YcJb5sMWnSJGg0GtSpUwdBQUGIiYmx16YQEREREZGTUymKojh6EERERERERPnRtm1bNGrUCIsWLXL0UIiIiIiIqBRgpgoREREREREREREREZEVGFQhIiIiIiIiIiIiIiKyAst/ERERERERERERERERWYGZKkRERERERERERERERFZgUIWIiIiIiIiIiIiIiMgKDKoQERERERERERERERFZgUEVIiIiIiIiIiIiIiIiKzCoQkREREREREREREREZAUGVYiIiIiIiIiIiIiIiKzAoAoREREREREREREREZEVGFQhIiIiIiIiIiIiIiKywv8BIY+MtlMX4e8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 2000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.figure(figsize=(20, 5))\n",
    "plt.plot(x[0], linestyle='-', color=\"black\", linewidth=0.5)\n",
    "plt.plot(x[1], linestyle='-', color=\"red\", linewidth=0.5)\n",
    "plt.xlabel('point')\n",
    "plt.ylabel('Flux')\n",
    "plt.title('Spectrum')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3b6c7e3a-18dc-466b-9305-2ae205d77bd4",
   "metadata": {},
   "source": [
    "# 作业"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "628d181e-3672-4f52-90b1-2bef5c4c203b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "b3e58914-effc-424e-9a75-b000abcad392",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>3690</th>\n",
       "      <th>3691</th>\n",
       "      <th>3692</th>\n",
       "      <th>3693</th>\n",
       "      <th>3694</th>\n",
       "      <th>3695</th>\n",
       "      <th>3696</th>\n",
       "      <th>3697</th>\n",
       "      <th>3698</th>\n",
       "      <th>3699</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.644887</td>\n",
       "      <td>0.644887</td>\n",
       "      <td>0.644887</td>\n",
       "      <td>0.639924</td>\n",
       "      <td>0.637383</td>\n",
       "      <td>0.631326</td>\n",
       "      <td>0.631326</td>\n",
       "      <td>0.624770</td>\n",
       "      <td>0.621995</td>\n",
       "      <td>0.624770</td>\n",
       "      <td>...</td>\n",
       "      <td>0.172678</td>\n",
       "      <td>0.171245</td>\n",
       "      <td>0.169232</td>\n",
       "      <td>0.169223</td>\n",
       "      <td>0.162618</td>\n",
       "      <td>0.162618</td>\n",
       "      <td>0.162618</td>\n",
       "      <td>0.161662</td>\n",
       "      <td>0.160830</td>\n",
       "      <td>0.160830</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.523605</td>\n",
       "      <td>0.523605</td>\n",
       "      <td>0.523605</td>\n",
       "      <td>0.464911</td>\n",
       "      <td>0.449496</td>\n",
       "      <td>0.449496</td>\n",
       "      <td>0.407314</td>\n",
       "      <td>0.407314</td>\n",
       "      <td>0.407314</td>\n",
       "      <td>0.407314</td>\n",
       "      <td>...</td>\n",
       "      <td>0.077227</td>\n",
       "      <td>0.046834</td>\n",
       "      <td>0.046834</td>\n",
       "      <td>0.038490</td>\n",
       "      <td>0.038490</td>\n",
       "      <td>0.038490</td>\n",
       "      <td>0.038490</td>\n",
       "      <td>0.073258</td>\n",
       "      <td>0.073258</td>\n",
       "      <td>0.073258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.542289</td>\n",
       "      <td>0.526775</td>\n",
       "      <td>0.542289</td>\n",
       "      <td>0.542289</td>\n",
       "      <td>0.542289</td>\n",
       "      <td>0.526775</td>\n",
       "      <td>0.542289</td>\n",
       "      <td>0.542289</td>\n",
       "      <td>0.490767</td>\n",
       "      <td>0.484338</td>\n",
       "      <td>...</td>\n",
       "      <td>0.046864</td>\n",
       "      <td>0.060567</td>\n",
       "      <td>0.060567</td>\n",
       "      <td>0.058064</td>\n",
       "      <td>0.058064</td>\n",
       "      <td>0.058064</td>\n",
       "      <td>0.054775</td>\n",
       "      <td>0.058064</td>\n",
       "      <td>0.058064</td>\n",
       "      <td>0.058064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.182750</td>\n",
       "      <td>0.182750</td>\n",
       "      <td>0.182750</td>\n",
       "      <td>0.178371</td>\n",
       "      <td>0.178371</td>\n",
       "      <td>0.178371</td>\n",
       "      <td>0.178371</td>\n",
       "      <td>0.184619</td>\n",
       "      <td>0.191611</td>\n",
       "      <td>0.191611</td>\n",
       "      <td>...</td>\n",
       "      <td>0.908906</td>\n",
       "      <td>0.905213</td>\n",
       "      <td>0.902946</td>\n",
       "      <td>0.869508</td>\n",
       "      <td>0.839355</td>\n",
       "      <td>0.811381</td>\n",
       "      <td>0.811381</td>\n",
       "      <td>0.798528</td>\n",
       "      <td>0.776951</td>\n",
       "      <td>0.776951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.398485</td>\n",
       "      <td>0.398485</td>\n",
       "      <td>0.398485</td>\n",
       "      <td>0.398485</td>\n",
       "      <td>0.398485</td>\n",
       "      <td>0.378637</td>\n",
       "      <td>0.377025</td>\n",
       "      <td>0.377025</td>\n",
       "      <td>0.378637</td>\n",
       "      <td>0.417282</td>\n",
       "      <td>...</td>\n",
       "      <td>0.268237</td>\n",
       "      <td>0.267014</td>\n",
       "      <td>0.267014</td>\n",
       "      <td>0.256718</td>\n",
       "      <td>0.250792</td>\n",
       "      <td>0.250792</td>\n",
       "      <td>0.256718</td>\n",
       "      <td>0.250792</td>\n",
       "      <td>0.246738</td>\n",
       "      <td>0.246738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>695</th>\n",
       "      <td>0.326276</td>\n",
       "      <td>0.326276</td>\n",
       "      <td>0.336668</td>\n",
       "      <td>0.337864</td>\n",
       "      <td>0.336668</td>\n",
       "      <td>0.336668</td>\n",
       "      <td>0.336668</td>\n",
       "      <td>0.336668</td>\n",
       "      <td>0.336668</td>\n",
       "      <td>0.156406</td>\n",
       "      <td>...</td>\n",
       "      <td>0.897690</td>\n",
       "      <td>0.895408</td>\n",
       "      <td>0.876925</td>\n",
       "      <td>0.845915</td>\n",
       "      <td>0.845915</td>\n",
       "      <td>0.845915</td>\n",
       "      <td>0.845915</td>\n",
       "      <td>0.845915</td>\n",
       "      <td>0.831547</td>\n",
       "      <td>0.831547</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>696</th>\n",
       "      <td>0.114408</td>\n",
       "      <td>0.114408</td>\n",
       "      <td>0.164843</td>\n",
       "      <td>0.114408</td>\n",
       "      <td>0.126679</td>\n",
       "      <td>0.126679</td>\n",
       "      <td>0.126679</td>\n",
       "      <td>0.164843</td>\n",
       "      <td>0.133866</td>\n",
       "      <td>0.162061</td>\n",
       "      <td>...</td>\n",
       "      <td>0.911579</td>\n",
       "      <td>0.906685</td>\n",
       "      <td>0.874931</td>\n",
       "      <td>0.847480</td>\n",
       "      <td>0.816839</td>\n",
       "      <td>0.769807</td>\n",
       "      <td>0.769807</td>\n",
       "      <td>0.764264</td>\n",
       "      <td>0.737750</td>\n",
       "      <td>0.737750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>697</th>\n",
       "      <td>0.000957</td>\n",
       "      <td>0.000957</td>\n",
       "      <td>0.000957</td>\n",
       "      <td>0.001003</td>\n",
       "      <td>0.001069</td>\n",
       "      <td>0.001167</td>\n",
       "      <td>0.001268</td>\n",
       "      <td>0.001345</td>\n",
       "      <td>0.001353</td>\n",
       "      <td>0.001390</td>\n",
       "      <td>...</td>\n",
       "      <td>0.004026</td>\n",
       "      <td>0.003980</td>\n",
       "      <td>0.003980</td>\n",
       "      <td>0.003980</td>\n",
       "      <td>0.003807</td>\n",
       "      <td>0.003807</td>\n",
       "      <td>0.003807</td>\n",
       "      <td>0.003807</td>\n",
       "      <td>0.004118</td>\n",
       "      <td>0.004118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>698</th>\n",
       "      <td>0.426018</td>\n",
       "      <td>0.426018</td>\n",
       "      <td>0.402587</td>\n",
       "      <td>0.402587</td>\n",
       "      <td>0.411177</td>\n",
       "      <td>0.411177</td>\n",
       "      <td>0.402587</td>\n",
       "      <td>0.371294</td>\n",
       "      <td>0.371294</td>\n",
       "      <td>0.400419</td>\n",
       "      <td>...</td>\n",
       "      <td>0.222660</td>\n",
       "      <td>0.202029</td>\n",
       "      <td>0.199512</td>\n",
       "      <td>0.184385</td>\n",
       "      <td>0.179164</td>\n",
       "      <td>0.179164</td>\n",
       "      <td>0.179164</td>\n",
       "      <td>0.179164</td>\n",
       "      <td>0.179164</td>\n",
       "      <td>0.179164</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>699</th>\n",
       "      <td>0.474318</td>\n",
       "      <td>0.474318</td>\n",
       "      <td>0.474318</td>\n",
       "      <td>0.455182</td>\n",
       "      <td>0.399860</td>\n",
       "      <td>0.392732</td>\n",
       "      <td>0.392732</td>\n",
       "      <td>0.363819</td>\n",
       "      <td>0.363819</td>\n",
       "      <td>0.389885</td>\n",
       "      <td>...</td>\n",
       "      <td>0.096176</td>\n",
       "      <td>0.095878</td>\n",
       "      <td>0.095698</td>\n",
       "      <td>0.080699</td>\n",
       "      <td>0.080699</td>\n",
       "      <td>0.080699</td>\n",
       "      <td>0.080699</td>\n",
       "      <td>0.080699</td>\n",
       "      <td>0.064194</td>\n",
       "      <td>0.064194</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>700 rows × 3700 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         0         1         2         3         4         5         6     \\\n",
       "0    0.644887  0.644887  0.644887  0.639924  0.637383  0.631326  0.631326   \n",
       "1    0.523605  0.523605  0.523605  0.464911  0.449496  0.449496  0.407314   \n",
       "2    0.542289  0.526775  0.542289  0.542289  0.542289  0.526775  0.542289   \n",
       "3    0.182750  0.182750  0.182750  0.178371  0.178371  0.178371  0.178371   \n",
       "4    0.398485  0.398485  0.398485  0.398485  0.398485  0.378637  0.377025   \n",
       "..        ...       ...       ...       ...       ...       ...       ...   \n",
       "695  0.326276  0.326276  0.336668  0.337864  0.336668  0.336668  0.336668   \n",
       "696  0.114408  0.114408  0.164843  0.114408  0.126679  0.126679  0.126679   \n",
       "697  0.000957  0.000957  0.000957  0.001003  0.001069  0.001167  0.001268   \n",
       "698  0.426018  0.426018  0.402587  0.402587  0.411177  0.411177  0.402587   \n",
       "699  0.474318  0.474318  0.474318  0.455182  0.399860  0.392732  0.392732   \n",
       "\n",
       "         7         8         9     ...      3690      3691      3692  \\\n",
       "0    0.624770  0.621995  0.624770  ...  0.172678  0.171245  0.169232   \n",
       "1    0.407314  0.407314  0.407314  ...  0.077227  0.046834  0.046834   \n",
       "2    0.542289  0.490767  0.484338  ...  0.046864  0.060567  0.060567   \n",
       "3    0.184619  0.191611  0.191611  ...  0.908906  0.905213  0.902946   \n",
       "4    0.377025  0.378637  0.417282  ...  0.268237  0.267014  0.267014   \n",
       "..        ...       ...       ...  ...       ...       ...       ...   \n",
       "695  0.336668  0.336668  0.156406  ...  0.897690  0.895408  0.876925   \n",
       "696  0.164843  0.133866  0.162061  ...  0.911579  0.906685  0.874931   \n",
       "697  0.001345  0.001353  0.001390  ...  0.004026  0.003980  0.003980   \n",
       "698  0.371294  0.371294  0.400419  ...  0.222660  0.202029  0.199512   \n",
       "699  0.363819  0.363819  0.389885  ...  0.096176  0.095878  0.095698   \n",
       "\n",
       "         3693      3694      3695      3696      3697      3698      3699  \n",
       "0    0.169223  0.162618  0.162618  0.162618  0.161662  0.160830  0.160830  \n",
       "1    0.038490  0.038490  0.038490  0.038490  0.073258  0.073258  0.073258  \n",
       "2    0.058064  0.058064  0.058064  0.054775  0.058064  0.058064  0.058064  \n",
       "3    0.869508  0.839355  0.811381  0.811381  0.798528  0.776951  0.776951  \n",
       "4    0.256718  0.250792  0.250792  0.256718  0.250792  0.246738  0.246738  \n",
       "..        ...       ...       ...       ...       ...       ...       ...  \n",
       "695  0.845915  0.845915  0.845915  0.845915  0.845915  0.831547  0.831547  \n",
       "696  0.847480  0.816839  0.769807  0.769807  0.764264  0.737750  0.737750  \n",
       "697  0.003980  0.003807  0.003807  0.003807  0.003807  0.004118  0.004118  \n",
       "698  0.184385  0.179164  0.179164  0.179164  0.179164  0.179164  0.179164  \n",
       "699  0.080699  0.080699  0.080699  0.080699  0.080699  0.064194  0.064194  \n",
       "\n",
       "[700 rows x 3700 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(x)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3eb248e8-c7e4-4bf8-9a91-71cb7f6f1987",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>principal component 1</th>\n",
       "      <th>principal component 2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-7.762766</td>\n",
       "      <td>-8.188306</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-10.851160</td>\n",
       "      <td>4.094696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-10.148022</td>\n",
       "      <td>2.565081</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>17.094673</td>\n",
       "      <td>6.508277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-5.225841</td>\n",
       "      <td>1.237990</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   principal component 1  principal component 2\n",
       "0              -7.762766              -8.188306\n",
       "1             -10.851160               4.094696\n",
       "2             -10.148022               2.565081\n",
       "3              17.094673               6.508277\n",
       "4              -5.225841               1.237990"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pca = PCA(n_components=2)\n",
    "principalComponents = pca.fit_transform(x)\n",
    "principalDf = pd.DataFrame(data = principalComponents\n",
    "             , columns = ['principal component 1', 'principal component 2'])\n",
    "principalDf.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "a5fcf9cb-0a17-421a-8b46-0a16eee8c0ef",
   "metadata": {},
   "outputs": [],
   "source": [
    "trainData_X= df\n",
    "trainData_y = y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "7a3993b8-d570-42c2-8312-c3c93e16ff78",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(trainData_X, trainData_y, test_size=0.3, random_state=123456)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "cd580099-eb84-42b9-bdf4-3a1377982b7c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(490, 3700) (210, 3700)\n"
     ]
    }
   ],
   "source": [
    "print(X_train.shape,X_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "b95c9c6d-e36d-4e51-bfd0-34955fef2614",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-3 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-3 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-3 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-3 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-3 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-3 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;RandomForestClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier()"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "# 通过RandomForestClassifier类定义一个随机森林模型，名字叫rf\n",
    "rf = RandomForestClassifier(n_estimators = 100)\n",
    "\n",
    "# 对lr模型进行训练(fit)\n",
    "rf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "c6aebe42-a772-4324-b0aa-d19565b6308d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'criterion': 'gini', 'max_features': 4, 'n_estimators': 30}"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "parameters = {\n",
    "    'n_estimators':[5,10,15,20,30],\n",
    "    'max_features':[1,2,3,4],\n",
    "    'criterion':['gini','entropy']\n",
    "}\n",
    "\n",
    "rf = RandomForestClassifier()\n",
    "rf_search = GridSearchCV(rf, parameters, scoring='accuracy', cv=5)\n",
    "rf_search.fit(X_train, y_train)\n",
    "\n",
    "#查看最佳结果\n",
    "rf_search.best_estimator_\n",
    "rf_search.best_score_\n",
    "rf_search.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "9aa46f59-c6f2-483a-9a11-15a98dc296ba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-6 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-6 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-6 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-6 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-6 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-6 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-6 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-6 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-6 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-6 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-6 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-6 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-6 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-6 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-6\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(max_features=4, n_estimators=30)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" checked><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;RandomForestClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(max_features=4, n_estimators=30)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier(max_features=4, n_estimators=30)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf = RandomForestClassifier(criterion='gini',max_features=4,n_estimators=30)\n",
    "rf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "dcc87639-6810-4c8d-94fa-4342df468b3b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           A       0.63      0.76      0.69        25\n",
      "           B       0.92      0.73      0.81        30\n",
      "           F       0.70      0.72      0.71        29\n",
      "           G       0.79      0.92      0.85        25\n",
      "           K       0.72      0.74      0.73        31\n",
      "           M       1.00      0.82      0.90        40\n",
      "           O       0.91      0.97      0.94        30\n",
      "\n",
      "    accuracy                           0.81       210\n",
      "   macro avg       0.81      0.81      0.81       210\n",
      "weighted avg       0.82      0.81      0.81       210\n",
      "\n",
      "[[19  0  1  0  4  0  1]\n",
      " [ 1 22  5  1  0  0  1]\n",
      " [ 1  1 21  5  0  0  1]\n",
      " [ 0  0  1 23  1  0  0]\n",
      " [ 6  0  2  0 23  0  0]\n",
      " [ 3  0  0  0  4 33  0]\n",
      " [ 0  1  0  0  0  0 29]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc\n",
    "\n",
    "# 利用模型对测试集进行预测，输出target预测标签值和概率\n",
    "y_test_pred = rf.predict(X_test)\n",
    "y_test_prob = rf.predict_proba(X_test)\n",
    "\n",
    "# 分类评估汇总报告classification_report\n",
    "print(classification_report(y_test,y_test_pred))\n",
    "# 误分类矩阵 confusion_matrix\n",
    "print(confusion_matrix(y_test,y_test_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "b2d39bc1-3a42-4a51-b205-4697fac8a3f2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[7.6978165e-01 1.7973205e-01 2.8702039e-02 7.2854431e-03 3.7782108e-03\n",
      " 1.6088659e-03 1.0621670e-03 9.3496847e-04 7.7522884e-04 5.6108081e-04\n",
      " 5.2407687e-04 4.0272169e-04 3.0075916e-04 2.3919017e-04 2.1719506e-04\n",
      " 1.8657488e-04 1.7198338e-04 1.4824087e-04 1.3516321e-04 1.1793935e-04]\n"
     ]
    },
    {
     "data": {
      "image/png": "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czncrFy5UkePHpUkLV68WEePHlVBQYEGDBigP/zhDx5vEAAAwBUuh5t//zbwCy64QLm5uR5tCAAAwB0un3Nz22236e2335ZhGB5pIDc3VzExMQoICFBCQoKKi4vPuO7OnTs1evRoBQcHKzAwUEOGDGG2CAAAOHE53NTU1Gj8+PHq3bu35s+fr/Ly8jbvvKCgQBkZGVq0aJHKyso0ZswYpaamymaztbh+t27ddOedd+rdd9/Vvn37dN999+m+++5Tfn5+m3sAAADmYjHaMAXzww8/6JVXXtGLL76o4uJiDR48WLfeequmTJmivn37trrOyJEjNWLECOXl5TnGYmNjNXHiROXk5LSqxs0336xu3brp+eefb9X6dXV1slqtqq2tVVBQUKt7ba2+Czd7pM7BpeM9UgcAADNw5f27Td8t1aNHD/3617/W9u3bdejQId122216/vnnNWDAgFbXaGhoUGlpqVJSUpzGU1JSVFJS0qoaZWVlKikp0ZVXXnnGderr61VXV+e0AAAA83LrizNPnDihXbt26YMPPtDBgwcVFhbW6m2rq6vV2NjYbJuwsDBVVlaeddvevXvL399fiYmJmjNnjmbPnn3GdXNycmS1Wh1LVFRUq3sEAACdT5vCzbZt23T77bcrLCxM06dPV/fu3fXGG2+ooqLC5VoWi8XpsWEYzcZ+qri4WLt27dKTTz6pVatW6aWXXjrjutnZ2aqtrXUsbekRAAB0Hi5fCt67d2/V1NTouuuu01NPPaUJEyYoICDA5R2HhITIx8en2SxNVVXVOWeAYmJiJElDhw7Vt99+q8WLF+uXv/xli+v6+/vL39/f5f4AAEDn5PLMzf33369vvvlGGzdu1C233NKmYCNJfn5+SkhIUFFRkdN4UVGRkpOTW13HMAzH10EAAAC4PHPz61//2mM7z8rK0tSpU5WYmKikpCTl5+fLZrMpPT1d0qmPlA4fPqx169ZJkv70pz+pT58+GjJkiKRT971Zvny57rrrLo/1BAAAOjeXw40npaWlqaamRkuWLJHdbld8fLwKCwsVHR0tSbLb7U73vGlqalJ2drYOHDggX19f9e/fX0uXLtVvfvMbb70EAADQwbTpPjedGfe5AQCg82n3+9wAAAB0VIQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABgKoQbAABg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jzzyiCRp+PDh+sc//qG8vDyn70Bz15o1a5SamurSeQ5nU1BQoPXr1+vFF19UXFycysvLlZGRocjISE2fPt3t+s8//7xmzpypiy66SD4+PhoxYoSmTJmi3bt3e6B7Zz+dyTIMwyOzW+3txIkTmjx5spqampSbm+uxuldddZXKy8tVXV2tp59+WpMmTdIHH3yg0NDQNtcsLS3V6tWrtXv37nb53aalpTl+jo+PV2JioqKjo7V58+Y2B4bTJ8ffeOONyszMlCRdeumlKikp0ZNPPqkrr7zS/cb/f2vXrtWvfvUrj/279fjjj+v999/Xpk2bFB0drXfffVd33HGHIiIi3JrR7tq1q1577TXNmjVLPXv2lI+Pj8aOHev072NrnO19pSMfj8zcmMRdd92lTZs2adu2berdu7fH6vr5+WnAgAFKTExUTk6Ohg0bptWrV7tdt7S0VFVVVUpISJCvr698fX21Y8cOPf744/L19VVjY6MHuj+lW7duGjp0aKuuEjibiIiIZqEuNja2VVdjtNahQ4f097//XbNnz/ZYzQULFmjhwoWaPHmyhg4dqqlTpyozM9NjM2b9+/fXjh07dPToUVVUVOjDDz/UiRMnFBMT45H6khxXu/30f4VVVVXN/vfY0Zw4cUKTJk3SgQMHVFRU5LFZG+nU3/aAAQM0atQorVmzRr6+vlqzZo1bNYuLi1VVVaU+ffo4js1Dhw5p/vz56tu3r2ca/zcRERGKjo526/gMCQmRr69vux+fxcXF+uyzzzx2fP7444+69957tXLlSk2YMEGXXHKJ7rzzTqWlpWn58uVu109ISHD859Rut2vLli2qqalp9bF5pveVznA8Em46OcMwdOedd2rDhg165513PPqGcqb9uTN9fNo111yjPXv2qLy83LEkJibqV7/6lcrLy+Xj4+OBbk+pr6/Xvn37FBER4Vad0aNHN7sc8vPPP3d80asnPPvsswoNDdX48eM9VvP48ePq0sX5UPfx8fHYpeCndevWTREREfr++++1detW3XjjjR6rHRMTo/DwcMdVZNKp80x27Nih5ORkj+3H004Hmy+++EJ///vfFRwc3K7788TxOXXqVH3yySdOx2ZkZKQWLFigrVu3eqjT/6empkYVFRVuHZ9+fn76+c9/3u7H55o1a5SQkOCR85qkU38fJ06caPfj02q1qlevXvriiy+0a9eucx6b53pf6QzHIx9LnSdHjx7Vl19+6Xh84MABlZeXq2fPnurTp0+b686ZM0cvvvii/vrXv6p79+6OJG21WhUYGOhWz/fee69SU1MVFRWlI0eO6OWXX9b27du1ZcsWt+pKp87V+Ol5Qd26dVNwcLDb5wvdfffdmjBhgvr06aOqqio9/PDDqqurc/sjmMzMTCUnJ+uRRx7RpEmT9OGHHyo/P1/5+flu1T2tqalJzz77rKZPny5fX88dmhMmTNDvf/979enTR3FxcSorK9PKlSs1c+ZMj9TfunWrDMPQ4MGD9eWXX2rBggUaPHiwbrvtNpfqnOsYycjI0COPPKKBAwdq4MCBeuSRR3TBBRdoypQpbtX97rvvZLPZHPefOf0GGR4efs77I52tdmRkpP77v/9bu3fv1t/+9jc1NjY6js+ePXvKz8+vzbWDg4P1+9//XjfccIMiIiJUU1Oj3Nxcff311626fcC5fic/DWFdu3ZVeHi4Bg8e7Fbtnj17avHixfrFL36hiIgIHTx4UPfee69CQkJ00003udXzggULlJaWpiuuuEJXXXWVtmzZojfeeEPbt293+/chSXV1dXr11Ve1YsWKc9ZzpfaVV16pBQsWKDAwUNHR0dqxY4fWrVunlStXul371VdfVa9evdSnTx/t2bNH8+bN08SJE51OBG7Jud5XTt+TrC3H43njrcu0/tNs27bNkNRsmT59ult1W6opyXj22Wfd7nnmzJlGdHS04efnZ/Tq1cu45pprjLfeesvtumfiqUvB09LSjIiICKNr165GZGSkcfPNNxv/+Mc/3G/QMIw33njDiI+PN/z9/Y0hQ4YY+fn5HqlrGIaxdetWQ5Lx2WefeaymYRhGXV2dMW/ePKNPnz5GQECA0a9fP2PRokVGfX29R+oXFBQY/fr1M/z8/Izw8HBjzpw5xg8//OBynXMdI01NTcYDDzxghIeHG/7+/sYVV1xh7Nmzx+26zz77bIvPP/DAA27VPn1peUvLtm3b3Kr9448/GjfddJMRGRlp+Pn5GREREcYNN9xgfPjhh+es25rfyU+5cin42WofP37cSElJMXr16mV07drV6NOnjzF9+nTDZrN5pOc1a9YYAwYMMAICAoxhw4YZGzdudLvn05566ikjMDDQ5b/tc9W22+3GjBkzjMjISCMgIMAYPHiwsWLFilbdBuJctVevXm307t3b8bu+7777WnXct+Z9pa3H4/liMQzDaEMmAgAA6JA45wYAAJgK4QYAAJgK4QYAAJgK4QYAAJgK4QYAAJgK4QYAAJgK4QYAAJgK4QYAAJgK4QYAAJgK4QYAAJgK4QYAAJgK4QYAAJjK/we+muIxotBvTQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA \n",
    "pca = PCA(n_components=20)\n",
    "X_pca = pca.fit_transform(x)\n",
    "\n",
    "var_ratio = pca.explained_variance_ratio_#计算比例\n",
    "print(var_ratio)\n",
    "\n",
    "#主成分\n",
    "fig2 = plt.figure()\n",
    "plt.bar(list(range(1, 21)),var_ratio)\n",
    "plt.xticks(list(range(1, 21)),list(range(1, 21)))\n",
    "plt.ylabel(\"variance ratio \")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "75e470a1-cc45-44eb-9043-41c50c2ab67e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(700, 15)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA \n",
    "pca = PCA(n_components=15)\n",
    "X_pca = pca.fit_transform(x)\n",
    "print(X_pca.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "b89bc156-dec5-4938-9b17-42641a70f28a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用时40min\n",
    "# git提交修改"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5a6fb224-dfbe-48ef-bdc1-77cf32beb31e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
